package com.j.lemon.learn.basic;//package com.jingantech.lemon;
//
//import com.fasterxml.jackson.databind.ObjectMapper;
//import HttpUtils;
//import com.sun.deploy.util.StringUtils;
//
//import javax.servlet.ServletException;
//import javax.servlet.annotation.WebServlet;
//import javax.servlet.http.HttpServlet;
//import javax.servlet.http.HttpServletRequest;
//import javax.servlet.http.HttpServletResponse;
//import java.io.IOException;
//import java.util.Map;
//
//@WebServlet(name = "casSampleServlet", urlPatterns = "/casLogin")
//public class CasSampleServlet extends HttpServlet {
//
//    @Override
//    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        // user为在应用系统判断用户是否已经登陆，如果已经登陆，则不需要到NGIAM认证端认证
//        if (req.getSession().getAttribute("user")==null){
//            // ticket为交换用户信息的票据
//            String ticket = req.getParameter("ticket");
//            // cas_server_url为NGIAM认证端的cas认证地址（景安提供 http://sso.jingantech.com/ngiam-rst/cas）
//            String cas_server_url = "http://sso.jingantech.com/ngiam-rst/cas";
//            if(ticket==null){
//                /*
//                如果ticket票据为空，跳转到认证端进行认证，
//                service为认证完后的回调地址(目标应用登录成功跳转页面地址http://localhost:8083/casLogin)，
//                NGIAM认证端认证完成后，会跳转到应用端，携带ticket票据
//                 */
//                resp.sendRedirect(cas_server_url + "/login?service=http://sso.jingantech.com:8083/lemon/casLogin");
//                return;
//            }else {
//                // 如果ticket不为空，则使用ticket交换用户信息，用户信息格式有xml和json两种格式
//                // format=xml时，返回的info_url为xml格式；format=json时，返回的info_url是json格式
//                String info_url = cas_server_url + "/serviceValidate?ticket="
//                        + ticket
//                        + "&service=http://sso.jingantech.com:8083/lemon/casLogin&format=json";
//                /**
//                 *获取用户信息
//                 *示例：getRes方法参数info_url中format值有 两种：xml和json
//                 *当为xml时，方法返回的用户信息res为xml格式
//                 *当为json时，方法返回的用户信息res为json格式
//                 */
//                String res = HttpUtils.get(info_url);
//                //情况二：res为json格式时
//                //示例从json解析获取应用账户名：
//                String accountName=getAccountNameFromJSON(res);
//                System.out.println(accountName);
//
//                //获取用户信息后，设置session
//                // TODO
//                 req.getSession().setAttribute("username", accountName);
//                 req.getRequestDispatcher("/demo/success2.jsp").forward(req, resp);
//            }
//
//        }else {
//            System.out.println("已经登录！");
//        }
//    }
//
//    //示例解析XML
//    //TODO 实际根据需求开发
//    private String getAccountNameFromXML(String resStr) {
//        //根据业务需求解析XML文件获取需要的用户信息
//        //
//        return null;
//    }
//
//    //示例解析JSON
//    //TODO 实际根据需求开发
//    private String getAccountNameFromJSON(String resStr) {
//        ObjectMapper mapper = new ObjectMapper();
//        try {
//            Map<String, Object> userData = mapper.readValue(resStr, Map.class);
//            Map<String, Object> serviceResponse=(Map<String, Object>)userData.get("serviceResponse");
//            Map<String, Object> authInfo=(Map<String, Object>)serviceResponse.get("authenticationSuccess");
//            String accountName=authInfo.get("user").toString();
//            return accountName;
//        } catch (IOException e) {
//            e.printStackTrace();
//        }
//        return null;
//    }
//}
